package com.example.bloomfilterdemo.guavaUtils;
import org.redisson.Redisson;
import org.redisson.api.RBloomFilter;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
/**
 * Created by IntelliJ IDEA2022.3.2
 * @Author: Tenghw
 * @Date: 2023/06/08  20:06
 * @Description: 布隆过滤器测试代码：我们创建了一个最多存放100个整数的布隆过滤器，并且我们可以容忍误判的概率为百分之（0.01）
 */
@SuppressWarnings("all")
public class BloomFilterTest1 {
    /**
     * 预计插入的数据
     */
    private static Integer expectedInsertions = 100;
    /**
     * 误判率
     */
    private static Double fpp = 0.01;

    public static void main(String[] args) {
        // Redis连接配置，无密码
        Config config = new Config();
        config.useSingleServer().setAddress("redis://192.168.100.184:6379");
        // config.useSingleServer().setPassword("123456");

        // 初始化布隆过滤器
        RedissonClient client = Redisson.create(config);
        // 这里的user,是该布隆过滤器的名字
        RBloomFilter<Object> bloomFilter = client.getBloomFilter("user");
        bloomFilter.tryInit(expectedInsertions, fpp);

        // 布隆过滤器增加元素
        for (Integer i = 0; i < expectedInsertions; i++) {
            bloomFilter.add(i);
        }

        // 统计可能存在的元素个数
        int count = 0;
        for (int i = expectedInsertions; i < expectedInsertions * 2; i++) {
            if (bloomFilter.contains(i)) {
                count++;
            }
        }
        System.out.println("误判次数" + count);
    }
}